#ifndef HTTP_CONNECTION_H
#define HTTP_CONNECTION_H
#include "defin.h"

class http_connection
{
public:
    explicit http_connection(int id);
    ~http_connection();

    //分析http协议
    bool analyse_http_protocol(int fd);

    //获取结果内容
    const char *get_respones();

private:
    //接收http协议头
    bool recv_http_head(int fd);
    //分析http协议头
    void analyse_head();
    //分析请求类型
    void analyse_req_type(const char *req_type);
    //分析url和请求参数
    void analyse_req_url(std::string &url);
    //分析param和请求参数
    void analyse_req_param(std::string &param);
    //分析请求包体长度
    void analyse_req_body_len();
    //接收http数据
    bool recv_http_body(int fd);
    //接收tcp数据
    int recv_n(int fd, char *buf, int len);

private:
    //接收到的原生http协议头
    std::vector<std::string> m_vec_http_head;
    //处理后的键值对http协议头
    http_head m_map_head;
    //处理后的键值对请求参数
    http_param m_map_param;
    //http连接id
    int m_id;
    //请求类型
    short m_req_type;
    //请求url
    std::string m_req_url;
    //请求内容长度
    int m_req_body_len;
    //请求内容
    char *m_req_body;
    //请求结果
    const char *m_respones_data;
};
#endif